/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modulo3;

import Modelo.DAL.Extintor_DAO;
import Modelo.Extintor;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import Acceso.Security;
import java.util.GregorianCalendar;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.json.JSONArray;
import org.json.JSONObject;

/**
 *
 * @author glpc
 */
public class modificarExtintor extends org.apache.struts.action.Action {

    /* forward name="success" path="" */
    private static final String SUCCESS = "success";
    private static final String FAILURE = "failure";
    private static final String[] ALLOWED = {"Administrador","Gestionar Sistemas de Extincion"};

    /**
     * This is the action called from the Struts framework.
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return
     */
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        if (!Security.validateSession(request, ALLOWED)) {
            Security.privilegeError(response);
            return mapping.findForward("errorPriv");
        }
        System.out.println("Paso Autenticación");

        modificarExtintorForm formBean = (modificarExtintorForm) form;
        ActionErrors errors = new ActionErrors();
        boolean error = false;
        Pattern p;
        Matcher m;
        // Necesario para llenar le formulario
        String flag = request.getParameter("flag");
        if ((flag != null) && flag.equals("ida")) {
            System.out.println("entro en el flag ida");
            String id_nro_bien = formBean.getId_nro_bien();
            String select = "select  (Select count(*) from extintor), * from extintor where id_nro_bien = " + id_nro_bien;

            response.setContentType("text/json");
            JSONArray extintor = Extintor_DAO.consultarExtintor(select);
            //System.out.println("\n\nExtintor Ida mostrar = " + extintor);

            if (extintor == null) {
                formBean.setError("");
                formBean.setSubmit("");
                formBean.setReset("");
                return mapping.findForward(FAILURE);
            }
            JSONObject ext = new JSONObject();
            ext.put("modificarExtintorIda", extintor);
            PrintWriter pw = response.getWriter();
            pw.write(ext.toString());
            pw.flush();
            pw.close();
            formBean.setError("");
            formBean.setSubmit("");
            formBean.setReset("");
            return mapping.findForward(FAILURE);
        }
        // Necesario para llenar le formulario

        // Necesario para modificar el objeto
        String submit = formBean.getSubmit();
        System.out.println(" Submit = " + submit);
        if ((submit != null) && submit.equals("submit")) {

            // Necesario para resetear el formulario
            String reset = formBean.getReset();
            if ((reset != null) && reset.equals("si")) {
                System.out.println("RESETEAR!!!!!");
                formBean.reset(mapping, request);
                formBean.setError("");
                formBean.setSubmit("");
                formBean.setReset("");
                return mapping.findForward(FAILURE);
            }
            formBean.setReset("si");
            // Necesario para resetear el formulario

            System.out.println("entro en el flag submit");
            String idNroBien = formBean.getId_nro_bien();
            String sede = formBean.getSede();
            String piso = formBean.getPiso();
            String edificio = formBean.getEdificio();
            String tipo = formBean.getTipo();
            String capacidad = formBean.getCapacidad();
            String fechaUltimaRecarga = formBean.getFecha_ultima_recarga();
            String status = formBean.getStatus();
            String personaContacto = formBean.getPersona_contacto();
            String senalizado = formBean.getSenalizado();
            String usado = formBean.getUsado();
            String referencia = formBean.getReferencia();
            String coordenadas = formBean.getCoordenadas();
            String categoria = formBean.getCategoria();


            if (idNroBien == null || idNroBien.equals("")) {
                errors.add("ext_nro_bien", new ActionMessage("errors.ext_nro_bien_requerido"));
                saveErrors(request, errors);
                error = true;
            } else {
                // Verificación de que el teléfono sólo tenga caracteres numéricos
                p = Pattern.compile("[0-9]*");
                m = p.matcher(idNroBien);
                if (!m.matches()) {
                    errors.add("ext_nro_bien", new ActionMessage("errors.ext_nro_bien_formato"));
                    saveErrors(request, errors);
                    error = true;
                } else {
                    try {
                        if (Integer.parseInt(idNroBien) <= 0) {
                            errors.add("ext_nro_bien", new ActionMessage("errors.ext_nro_bien_mayor_cero"));
                            saveErrors(request, errors);
                            error = true;
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
            if (sede == null || sede.equals("")) {
                errors.add("ext_sede", new ActionMessage("errors.ext_sede_requerido"));
                saveErrors(request, errors);
                error = true;
            }

            if (edificio == null || edificio.equals("")) {
                errors.add("ext_edificio", new ActionMessage("errors.ext_edificio_requerido"));
                saveErrors(request, errors);
                error = true;
            }

            if (piso == null || piso.equals("")) {
                errors.add("ext_piso", new ActionMessage("errors.ext_piso_requerido"));
                saveErrors(request, errors);
                error = true;
            }

            if (tipo == null || tipo.equals("")) {
                errors.add("ext_tipo", new ActionMessage("errors.ext_tipo_requerido"));
                saveErrors(request, errors);
                error = true;
            } else {
                // Verificación de que el nombre sólo tenga caracteres alfabéticos
                p = Pattern.compile("[^a-zA-Z0-9 ]+");
                m = p.matcher(tipo);
                if (m.find()) {
                    errors.add("ext_tipo", new ActionMessage("errors.ext_tipo_formato"));
                    saveErrors(request, errors);
                    error = true;
                }
            }

            if (capacidad == null || capacidad.equals("")) {
                errors.add("ext_capacidad", new ActionMessage("errors.ext_capacidad_requerido"));
                saveErrors(request, errors);
                error = true;
            } else {
                // Verificación de que el nombre sólo tenga caracteres alfabéticos
                p = Pattern.compile("[^a-zA-Z0-9\\. ]+");
                m = p.matcher(capacidad);
                if (m.find()) {
                    errors.add("ext_capacidad", new ActionMessage("errors.ext_capacidad_formato"));
                    saveErrors(request, errors);
                    error = true;
                }
            }

            if (fechaUltimaRecarga == null || fechaUltimaRecarga.equals("")) {
                errors.add("ext_fecha_ultimo", new ActionMessage("errors.ext_fecha_ultimo_requerido"));
                saveErrors(request, errors);
                error = true;
            }

//    ***************** Validacion de Fecha ******************
            try {

                // Se obtiene la fecha actual en el formato del script
                Calendar c = new GregorianCalendar();
                String dia, mes, annio;
                dia = Integer.toString(c.get(Calendar.DATE));
                mes = Integer.toString(c.get(Calendar.MONTH) + 1);
                annio = Integer.toString(c.get(Calendar.YEAR));
                String fechaHoy = dia + "/" + mes + "/" + annio;
                // Fin de obtener la fecha actual

                String DATE_FORMAT = "dd/MM/yyyy";
                SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
                Date c1 = sdf.parse(fechaHoy);
                Date primera = sdf.parse("01/01/1970");
                sdf.setLenient(false);
                Date c2 = sdf.parse(fechaUltimaRecarga);

                // Si la fecha elegida es posterior a la fecha actual
                if (c2.after(c1)) {
                    errors.add("ext_fecha_ultimo", new ActionMessage("errors.ext_fecha_ultimo_actual"));
                    saveErrors(request, errors);
                    error = true;
                }
                if (c2.before(primera)) {
                    errors.add("ext_fecha_ultimo", new ActionMessage("errors.ext_fecha_ultimo_antes_creacion"));
                    saveErrors(request, errors);
                    error = true;
                }

            } catch (Exception e) {
                e.printStackTrace();
                errors.add("ext_fecha_ultimo", new ActionMessage("errors.ext_fecha_ultimo_formato"));
                saveErrors(request, errors);
                error = true;
            }
//********************************************************************************

            if (status == null || status.equals("")) {
                errors.add("ext_status", new ActionMessage("errors.ext_status_requerido"));
                saveErrors(request, errors);
                error = true;
            }

            if (personaContacto == null || personaContacto.equals("")) {
                errors.add("ext_persona_contacto", new ActionMessage("errors.ext_persona_contacto_requerido"));
                saveErrors(request, errors);
                error = true;
            } else {
                // Verificación de que el nombre sólo tenga caracteres alfabéticos
                p = Pattern.compile("[^a-zA-Z ]+");
                m = p.matcher(personaContacto);
                if (m.find()) {
                    errors.add("ext_persona_contacto", new ActionMessage("errors.ext_persona_contacto_formato"));
                    saveErrors(request, errors);
                    error = true;
                }
            }

            if (referencia == null || referencia.equals("")) {
                errors.add("ext_referencia", new ActionMessage("errors.ext_referencia_requerido"));
                saveErrors(request, errors);
                error = true;
            }
            if (categoria == null || categoria.equals("")) {
                errors.add("ext_categoria", new ActionMessage("errors.ext_categoria_requerido"));
                saveErrors(request, errors);
                error = true;
            }
            /* if (coordenadas == null || coordenadas.equals("")) {
            formBean.setSubmit("");
            formBean.setReset("");
            formBean.setError("Debe colocar unas coordenadas del extintor. Intente Nuevamente.");
            return mapping.findForward(FAILURE);
            }*/
            if (error) {
                return mapping.findForward(FAILURE);
            }

            Extintor ext = new Extintor(idNroBien, sede, piso, edificio, tipo, capacidad, fechaUltimaRecarga, status, personaContacto, senalizado, usado, referencia, coordenadas, categoria);

            System.out.println("--> EXT: "+ext);

            if (Modelo.DAL.Extintor_DAO.actualizarExtintor(ext)) {
                System.out.println("--> ENTRA ");
                formBean.setError("");
                formBean.setSubmit("");
                formBean.setReset("");
                return mapping.findForward(SUCCESS);
            } else {
                System.out.println("--> ERROR ");
                formBean.setError("Ocurrió un error al intentar realizar la actualización del equipo. Por favor contacte con el administrador.");
                formBean.setSubmit("");
                formBean.setReset("");
                return mapping.findForward(FAILURE);
            }
        }

        //  Necesario para la primera ejecucion de la pagina y guardar el id del objeto
        String id_nro_bien_ida = request.getParameter("id_nro_bien_ida");
        System.out.println("\n\nid_nro_bien = " + id_nro_bien_ida + "\n\n");
        formBean.setId_nro_bien(id_nro_bien_ida);
        formBean.setError("");
        formBean.setSubmit("");
        formBean.setReset("");
        return mapping.findForward(FAILURE);
        //  Necesario para la primera ejecucion de la pagina y guardar el id del objeto
    }
}
